from http.server import BaseHTTPRequestHandler, HTTPServer
import sys

# 定义请求处理器
class MyHttpRequestHandler(BaseHTTPRequestHandler):

    # 处理 GET 请求
    def do_GET(self):
        # 1. 设置响应状态码
        self.send_response(200)

        # 2. 设置响应头，指定内容类型和编码
        self.send_header("Content-Type", "text/plain; charset=UTF-8")
        # 结束响应头
        self.end_headers()

        # 3. 准备并发送响应体
        # 仅在访问根路径 / 或 /index 时返回 "Hello 仓颉!"
        if self.path == '/' or self.path == '/index':
            message = "Hello 仓颉!"
        else:
            # 对于其他路径，返回 404 Not Found
            self.send_response(404)
            self.end_headers()
            message = "404 Not Found"

        # 将字符串编码为 UTF-8 字节流并发送
        self.wfile.write(bytes(message, "utf8"))
        return

# 主函数，用于启动服务器
def run(server_class=HTTPServer, handler_class=MyHttpRequestHandler, port=8080):
    server_address = ('127.0.0.1', port)
    httpd = server_class(server_address, handler_class)
    
    print(f"服务器已启动，请在浏览器中访问: http://127.0.0.1:{port}/index")
    print("按 Ctrl+C 停止服务器。")
    
    try:
        # 持续运行服务器，直到按下 Ctrl+C
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    
    # 服务器关闭前的清理工作
    httpd.server_close()
    print("服务器已停止。")

# 如果直接运行此脚本，则启动服务器
if __name__ == '__main__':
    # 可以从命令行参数指定端口，例如: python http_server.py 8888
    if len(sys.argv) == 2:
        run(port=int(sys.argv[1]))
    else:
        run()